package com.iSea;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.List;

import com.data.dao.JDBCBase;


public class ActivoJDBC {
	private Integer id;
	private String  nombreActivo;
	private Integer idPropietarios;
	private Integer idFabricante;
	private Integer idGrupo;
	private Integer idValoracion;
	private Integer idModelo;
	private Integer idEstado;
	private Integer idGarantia;
	private String fechaCompra;
	private String valorCompra;
	private String FechaActual;
	private Integer idValoracionRecomendada;
	private String terceros;
	private String fechaAlta;
	private String fechaReposicion;
	private String fechaUltimoModelo;
	private Integer idTipo;
	private Integer idSector;
	private Integer sector;
	private Integer idArea;
	private Integer area;
	private String tramo;
	private String idTramo;
	private String idElemento;
	private String denominacion;
	private Integer idRegimen;
	private Integer idSeguro;
	private DescripcionElementoJDBC descripcionLineal;
	private DescripcionElementoPuntualJDBC descripcionPuntual;
	private DescripcionElementoAreaJDBC descripcionArea;
	private ModelosJDBC modelo;
	private PropietarioJDBC propietario;
	private GruposJDBC grupo;
	private EstadoJDBC estado;
	private RegimenJDBC regimen;
	private ValoracionesJDBC valoracionActual;
	private ValoracionesJDBC valoracionRecomendada;
	private String tiempoTiempoReposicion;
	private TiposJDBC tipo;
	private SegurosJDBC seguro;
	private GarantiaJDBC garantia;
	private FabricanteJDBC fabricante;
	private String direccion;
	private String vidaUtil;
	private String valorReposicion;
	
	
	public String getValorReposicion() {
		return valorReposicion;
	}

	public void setValorReposicion(String valorReposicion) {
		this.valorReposicion = valorReposicion;
	}

	public String getVidaUtil() {
		return vidaUtil;
	}

	public void setVidaUtil(String vidaUtil) {
		this.vidaUtil = vidaUtil;
	}

	public String getValoracionHCA(){
		String resultado="";
	try
	{ 
		if(valorCompra!=null && !valorCompra.equals("") &&
				descripcionLineal!=null && descripcionLineal.getVida_util()!=null && !descripcionLineal.getVida_util().equals("")){
		Calendar c1 = Calendar.getInstance();
		Calendar c2= ObtieneCalendarFecha(fechaCompra);
		
		Integer n=c1.get(Calendar.YEAR)-c2.get(Calendar.YEAR);
		Double Po=Double.valueOf(valorCompra);
		Double Vo=Double.valueOf(1)/Double.valueOf(descripcionLineal.getVida_util());
		Double aux=((Vo*n));
		Double res=Po*aux;
		//res=Po-res;
		resultado=res.toString();
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}
	
	String[] split=resultado.split("\\.");
	if(split.length>1){
		int end=1;
		if(split[1].length()>2){
			end=3;
		}
		resultado=split[0]+"."+split[1].subSequence(0, end);
	}
	
	
	return resultado;
	}
	
	public String getValoracionGPLA(){
		String resultado="";
	try
	{ 
		if(valorCompra!=null && !valorCompra.equals("") &&
				descripcionLineal!=null && descripcionLineal.getVida_util()!=null && !descripcionLineal.getVida_util().equals("")){
		Calendar c1 = Calendar.getInstance();
		Calendar c2= ObtieneCalendarFecha(fechaCompra);
		Integer n=c1.get(Calendar.YEAR)-c2.get(Calendar.YEAR);
		Double MulInf=Double.valueOf("1");
		Double Vo=Double.valueOf(1)/Double.valueOf(descripcionLineal.getVida_util());
		Double SumVo=Double.valueOf("0");
		//Primer multiplicando de la formula
		for(int i=1;i<=n;i++){
			MulInf=MulInf*(1+obtieneValorInf(c2.get(Calendar.YEAR)));
			//Segundo sumatorio de la formula
			SumVo+=calculaSumatorio(c2.get(Calendar.YEAR),i,n,Vo);
			c2.set(Calendar.YEAR, c2.get(Calendar.YEAR)+1);
		}		
		Double Po=Double.valueOf(valorCompra);
		
		Double res=Po*(MulInf-SumVo);
		
		String[] split=resultado.split("\\.");
		if(split.length>1){
			int end=1;
			if(split[1].length()>2){
				end=3;
			}
			resultado=split[0]+"."+split[1].subSequence(0, end);
		}
		resultado=res.toString();
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}
	String[]split=resultado.split("\\.");
	if(split.length>1){
		int end=1;
		if(split[1].length()>2){
			end=3;
		}
		resultado=split[0]+"."+split[1].subSequence(0, end);
	}
	return resultado;
	}
	
	public String getValoracionGPLAbyYEAR(List<InflacionJDBC> lista, int anno){
		String resultado="";
	try
	{ 
		if(valorCompra!=null && !valorCompra.equals("") &&
				descripcionLineal!=null && descripcionLineal.getVida_util()!=null && !descripcionLineal.getVida_util().equals("")){
		Calendar c1 = Calendar.getInstance();
		Calendar c2= ObtieneCalendarFecha(anno+"-10-17");
		Integer n=c1.get(Calendar.YEAR)-c2.get(Calendar.YEAR);
		Double MulInf=Double.valueOf("1");
		Double Vo= Double.valueOf(descripcionLineal.getVida_util());
		Double SumVo=Double.valueOf("0");
		//Primer multiplicando de la formula
		for(int i=1;i<=n;i++){
			MulInf=MulInf*(1+obtieneValorInf2(lista, c2.get(Calendar.YEAR)));
			//Segundo sumatorio de la formula
			SumVo+=calculaSumatorio2(c2.get(Calendar.YEAR),i,n,Vo, lista);
			c2.set(Calendar.YEAR, c2.get(Calendar.YEAR)+1);
		}		
		Double Po=Double.valueOf(valorCompra);
		
		Double res=Po*(MulInf-SumVo);
		
		String[] split=resultado.split("\\.");
		if(split.length>1){
			int end=1;
			if(split[1].length()>2){
				end=3;
			}
			resultado=split[0]+"."+split[1].subSequence(0, end);
		}
		resultado=res.toString();
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}
	String[]split=resultado.split("\\.");
	if(split.length>1){
		int end=1;
		if(split[1].length()>2){
			end=3;
		}
		resultado=split[0]+"."+split[1].subSequence(0, end);
	}
	return resultado;
	}
	
	
	private Double calculaSumatorio(Integer anio,Integer i,Integer n,Double Vo){
		Double resultado=Double.valueOf("0");
		Double SumInf=Double.valueOf("0");
		Double SumInfTo=Double.valueOf("1");
		for(int t=i;t<=n;t++){
			SumInf=Double.valueOf("1")+obtieneValorInf(anio);
			SumInfTo=SumInfTo*SumInf;
			anio++;
		}
		resultado=Vo*SumInf;
	return resultado;
	}
	
	private Double calculaSumatorio2(Integer anio,Integer i,Integer n,Double Vo, List<InflacionJDBC> lista){
		Double resultado=Double.valueOf("0");
		Double SumInf=Double.valueOf("0");
		Double SumInfTo=Double.valueOf("1");
		for(int t=i;t<=n;t++){
			SumInf=Double.valueOf("1")+obtieneValorInf2(lista,anio);
			SumInfTo=SumInfTo*SumInf;
			anio++;
		}
		resultado=Vo*SumInf;
	return resultado;
	}
	
	public String getValoracionCCA(){
		String resultado="";
	try
	{ 
		if(descripcionLineal!=null && descripcionLineal.getVida_util()!=null && !descripcionLineal.getVida_util().equals("")
			&&	descripcionLineal.getValor_reposicion()!=null && !descripcionLineal.getValor_reposicion().equals("")){
		Calendar c1 = Calendar.getInstance();
		Calendar c2= ObtieneCalendarFecha(fechaCompra);
		Integer n=c1.get(Calendar.YEAR)-c2.get(Calendar.YEAR);
		Double Po=Double.valueOf(descripcionLineal.getValor_reposicion());
		Double Vo=Double.valueOf(1)/Double.valueOf(descripcionLineal.getVida_util());
		Double aux=(((Vo*n)));
		aux=Double.valueOf("1")-aux;
		Double res=Po*aux;
		resultado=res.toString();
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}
	String[] split=resultado.split("\\.");
	if(split.length>1){
		int end=1;
		if(split[1].length()>2){
			end=3;
		}
		resultado=split[0]+"."+split[1].subSequence(0, end);
	}
	return resultado;
	}
	
	public String getValoracionVNR(){
		String resultado="";
	try
	{ 
		if(descripcionLineal!=null &&	descripcionLineal.getValor_reposicion()!=null && !descripcionLineal.getValor_reposicion().equals("")){
		resultado=descripcionLineal.getValor_reposicion();
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}
	return resultado;
	}
	
	public String getValoracionDCF(){
		String resultado="";
	try
	{ 
		if(descripcionLineal!=null && descripcionLineal.getVida_util()!=null && !descripcionLineal.getVida_util().equals("")
				&& descripcionLineal.getFlujo_monetario()!=null && !descripcionLineal.getFlujo_monetario().equals("")
			&&descripcionLineal.getCoste_operacional()!=null && !descripcionLineal.getCoste_operacional().equals("")){
		Integer Vos=Integer.valueOf(descripcionLineal.getVida_util());
		Calendar c1 = ObtieneCalendarFecha(fechaCompra);
		Integer N=(c1.get(Calendar.YEAR)+Vos)-c1.get(Calendar.YEAR);
		Double MulInf=Double.valueOf("0");
		Double res=Double.valueOf(0);
		Double FCi=Double.valueOf(descripcionLineal.getFlujo_monetario());
		Double COi=Double.valueOf(descripcionLineal.getCoste_operacional());
		for(int i=1;i<=N;i++){
			Double aux=1+obtieneValorInf(c1.get(Calendar.YEAR));
			MulInf=Math.pow(aux, i);
			res+= ((FCi)/MulInf)-((COi)/MulInf);
			c1.set(Calendar.YEAR,c1.get(Calendar.YEAR)+1);
		}
		resultado=res.toString();
		
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}
	String[] split=resultado.split("\\.");
	if(split.length>1){
		int end=1;
		if(split[1].length()>2){
			end=3;
		}
		resultado=split[0]+"."+split[1].subSequence(0, end);
	}
	
	
	return resultado;
	}
	
	private Double obtieneValorInf(Integer anio){
		InflacionJDBC aux;
		Double inf=Double.valueOf("0");
		try {
			aux = JDBCBase.getInflacionByAnio(anio.toString());
		
	   inf=Double.valueOf(aux.getValor());
		inf=inf/100;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	return inf;
	}
	
	private Double obtieneValorInf2(List<InflacionJDBC> lista, Integer anio){
		Double aux = 0.0;
		
		for(int i=0;i<lista.size();i++){
			InflacionJDBC obj_inflac = lista.get(i);
			if(obj_inflac.getAnio().equals(anio.toString())){
				aux = Double.valueOf(obj_inflac.getValor());
				aux = aux/100;
			}
		}
	return aux;
	}
	
	private Calendar ObtieneCalendarFecha(String fecha){
		Integer mes=0,anio=0,dia=0;
		if(fecha!=null){
			
		String[] splifechaAd=fecha.split("/");
		if(splifechaAd.length<=2){
			splifechaAd=fecha.split("-");
			mes=Integer.valueOf(splifechaAd[1]);
			anio=Integer.valueOf(splifechaAd[0]);
			dia=Integer.valueOf(splifechaAd[2].substring(0,2));
		}else{
		 mes=Integer.valueOf(splifechaAd[1]);
		 anio=Integer.valueOf(splifechaAd[2]);
		 dia=Integer.valueOf(splifechaAd[0]);
		}
		Calendar c2= Calendar.getInstance();
		c2.set(anio, mes, dia);
		return c2;
		}else{
			return Calendar.getInstance();
		}
	
	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getNombreActivo() {
		return nombreActivo == null?"-":nombreActivo;
	}
	public void setNombreActivo(String nombreActivo) {
		this.nombreActivo = nombreActivo;
	}
	public Integer getIdPropietarios() {
		return idPropietarios;
	}
	public void setIdPropietarios(Integer idPropietarios) {
		this.idPropietarios = idPropietarios;
	}
	public Integer getIdFabricante() {
		return idFabricante;
	}
	public void setIdFabricante(Integer idFabricante) {
		this.idFabricante = idFabricante;
	}
	public Integer getIdGrupo() {
		return idGrupo;
	}
	public void setIdGrupo(Integer idGrupo) {
		this.idGrupo = idGrupo;
	}
	public Integer getIdValoracion() {
		return idValoracion;
	}
	public void setIdValoracion(Integer idValoracion) {
		this.idValoracion = idValoracion;
	}
	public Integer getIdModelo() {
		return idModelo;
	}
	public void setIdModelo(Integer idModelo) {
		this.idModelo = idModelo;
	}
	public Integer getIdGarantia() {
		return idGarantia;
	}
	public void setIdGarantia(Integer idGarantia) {
		this.idGarantia = idGarantia;
	}
	public String getFechaCompra() {
		return fechaCompra == null?"-":fechaCompra;
	}
	public void setFechaCompra(String fechaCompra) {
		this.fechaCompra = fechaCompra;
	}
	public String getValorCompra() {
		return valorCompra == null?"-":valorCompra;
	}
	public void setValorCompra(String valorCompra) {
		this.valorCompra = valorCompra;
	}
	public Integer getIdValoracionRecomendada() {
		return idValoracionRecomendada;
	}
	public void setIdValoracionRecomendada(Integer idValoracionRecomendada) {
		this.idValoracionRecomendada = idValoracionRecomendada;
	}
	public String getTerceros() {
		return terceros == null?"-":terceros;
	}
	public void setTerceros(String terceros) {
		this.terceros = terceros;
	}
	public String getFechaAlta() {
		return fechaAlta!=null ? fechaAlta.substring(0, 10): "";
	}
	public void setFechaAlta(String fechaAlta) {
		this.fechaAlta = fechaAlta;
	}
	public String getFechaReposicion() {
		return fechaReposicion!=null ? fechaReposicion.substring(0, 10): "";
	}
	public void setFechaReposicion(String fechaReposicion) {
		this.fechaReposicion = fechaReposicion;
	}
	public String getFechaUltimoModelo() {
		return fechaUltimoModelo!=null ? fechaUltimoModelo.substring(0, 10): "";
	}
	public void setFechaUltimoModelo(String fechaUltimoModelo) {
		this.fechaUltimoModelo = fechaUltimoModelo;
	}
	public DescripcionElementoJDBC getDescripcion() {
		return descripcionLineal;
	}
	public void setDescripcion(DescripcionElementoJDBC descripcion) {
		this.descripcionLineal = descripcion;
	}
	public ModelosJDBC getModelo() {
		return modelo;
	}
	public void setModelo(ModelosJDBC modelo) {
		this.modelo = modelo;
	}
	public PropietarioJDBC getPropietario() {
		return propietario;
	}
	public void setPropietario(PropietarioJDBC propietario) {
		this.propietario = propietario;
	}
	public String getIdElemento() {
		return idElemento == null?"-":idElemento;
	}
	public void setIdElemento(String idElemento) {
		this.idElemento = idElemento;
	}
	public String getDenominacion() {
		return denominacion == null?"-":denominacion;
	}
	public void setDenominacion(String denominacion) {
		this.denominacion = denominacion;
	}
	public Integer getSector() {
		return sector;
	}
	public void setSector(Integer sector) {
		this.sector = sector;
	}
	public Integer getArea() {
		return area;
	}
	public void setArea(Integer area) {
		this.area = area;
	}
	public String getTramo() {
		return tramo == null?"-":tramo;
	}
	public void setTramo(String tramo) {
		this.tramo = tramo;
	}
	public GruposJDBC getGrupo() {
		return grupo;
	}
	public void setGrupo(GruposJDBC grupo) {
		this.grupo = grupo;
	}
	public Integer getIdEstado() {
		return idEstado;
	}
	public void setIdEstado(Integer idEstado) {
		this.idEstado = idEstado;
	}
	public EstadoJDBC getEstado() {
		return estado;
	}
	public void setEstado(EstadoJDBC estado) {
		this.estado = estado;
	}
	public Integer getIdRegimen() {
		return idRegimen;
	}
	public void setIdRegimen(Integer idRegimen) {
		this.idRegimen = idRegimen;
	}
	public RegimenJDBC getRegimen() {
		return regimen;
	}
	public void setRegimen(RegimenJDBC regimen) {
		this.regimen = regimen;
	}
	public ValoracionesJDBC getValoracionActual() {
		
		return valoracionActual;
	}
	public void setValoracionActual(ValoracionesJDBC valoracionActual) {
		this.valoracionActual = valoracionActual;
	}
	public ValoracionesJDBC getValoracionRecomendada() {
		return valoracionRecomendada;
	}
	public void setValoracionRecomendada(ValoracionesJDBC valoracionRecomendada) {
		this.valoracionRecomendada = valoracionRecomendada;
	}
	public String getAntiguedad() {
		String result="";
		Calendar c1 = ObtieneCalendarFecha(fechaCompra);
		Calendar c2= Calendar.getInstance();
		Integer N=(c2.get(Calendar.YEAR))-c1.get(Calendar.YEAR);
		result=N.toString();
		return result;
	}
	
	public String getTiempoTiempoReposicion() {
		
		Calendar c1 = ObtieneCalendarFecha(fechaReposicion);
		Calendar c2= Calendar.getInstance();
		Integer N=(c1.get(Calendar.YEAR))-c2.get(Calendar.YEAR);
		tiempoTiempoReposicion=N.toString();

		return tiempoTiempoReposicion;
	}
	public String getAmortizacionActual() {
		Double amor = Double.valueOf(0);
		if( (idModelo != null) && (idModelo==1 || idModelo==2 || idModelo==5 || idModelo==6 || idModelo==7)){
			amor = Double.valueOf(getDescripcionPuntual().getAmortizacionAnual());
		}else if ((idModelo != null) && (idModelo==8)){
			amor = Double.valueOf(getDescripcionArea().getAmortizacionAnual());
		}
		Double ant=Double.valueOf(getAntiguedad());
		Double resul=amor*ant;
		return resul.toString();
	}
	public Integer getIdSeguro() {
		return idSeguro;
	}
	public void setIdSeguro(Integer idSeguro) {
		this.idSeguro = idSeguro;
	}
	public TiposJDBC getTipo() {
		return tipo;
	}
	public void setTipo(TiposJDBC tipo) {
		this.tipo = tipo;
	}
	public SegurosJDBC getSeguro() {
		return seguro;
	}
	public void setSeguro(SegurosJDBC seguro) {
		this.seguro = seguro;
	}
	public GarantiaJDBC getGarantia() {
		return garantia;
	}
	public void setGarantia(GarantiaJDBC garantia) {
		this.garantia = garantia;
	}
	public FabricanteJDBC getFabricante() {
		return fabricante;
	}
	public void setFabricante(FabricanteJDBC fabricante) {
		this.fabricante = fabricante;
	}
	public String getFechaActual() {
		return FechaActual !=null ? FechaActual.substring(0, 10): "";
	}
	public void setFechaActual(String fechaActual) {
		FechaActual = fechaActual;
	}
	public Integer getIdTipo() {
		return idTipo;
	}
	public void setIdTipo(Integer idTipo) {
		this.idTipo = idTipo;
	}
	public Integer getIdSector() {
		return idSector;
	}
	public void setIdSector(Integer idSector) {
		this.idSector = idSector;
	}
	public Integer getIdArea() {
		return idArea;
	}
	public void setIdArea(Integer idArea) {
		this.idArea = idArea;
	}
	public String getIdTramo() {
		return idTramo== null?"-":idTramo;
	}
	public void setIdTramo(String idTramo) {
		this.idTramo = idTramo;
	}
	
	public String getTercerosLiteral(){
		String resultado = "";
		if(terceros.equals("1")){
			resultado = "Si";
		}else if(terceros.equals("0")){
			resultado = "No";
		}
		return resultado;
	}
	
	public void setTercerosLietral(String entrada){
		if(terceros.equalsIgnoreCase("si")){
			terceros = "1";
		}else if(terceros.equalsIgnoreCase("no")){
			terceros = "1";
		}
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public DescripcionElementoJDBC getDescripcionLineal() {
		return descripcionLineal;
	}

	public void setDescripcionLineal(DescripcionElementoJDBC descripcionLineal) {
		this.descripcionLineal = descripcionLineal;
	}

	public DescripcionElementoPuntualJDBC getDescripcionPuntual() {
		return descripcionPuntual;
	}

	public void setDescripcionPuntual(
			DescripcionElementoPuntualJDBC descripcionPuntual) {
		this.descripcionPuntual = descripcionPuntual;
	}

	public DescripcionElementoAreaJDBC getDescripcionArea() {
		return descripcionArea;
	}

	public void setDescripcionArea(DescripcionElementoAreaJDBC descipcionArea) {
		this.descripcionArea = descipcionArea;
	}
	
	
	public String getValor_actual() {
		String valor = "";
		if(idValoracion.equals(1)){//HCA
			valor=getValoracionHCA();
		}else if(idValoracion.equals(2)){
			valor=getValoracionCCA();
		}else if(idValoracion.equals(3)){//CCA
			valor=getValoracionGPLA();
		}else if(idValoracion.equals(4)){
			valor=getValoracionVNR();
		}else if(idValoracion.equals(5)){
			valor=getValoracionDCF();
		}
		return valor == null ? "-" :valor;
	}
	


	
	

}
